import json

import xlrd,os
import pytest



# xlrd 指定版本：pip install xlrd==1.2.0  高版本xlrd升级后不支持xlsx文件读取了
# 打开Excel
# 方式一：绝对路径(不推荐)
# readbook = xlrd.open_workbook(r"D:\chat\pycharm\pytest_frame\testData\data.xlsx")

# 方式二：相对路径(推荐)
# 获取Excel表格的路径
path = os.path.dirname(os.path.dirname(__file__))+r"/testData/data.xlsx"
print(path)
readbook = xlrd.open_workbook(path)
# 获取sheet页的名字
print(readbook.sheet_names())
# 打开指定的sheet页
sheet = readbook.sheet_by_index(0)
# 获取这个sheet页最大行/最大列的值
max_col = sheet.nrows   # 最大行
max_col = sheet.ncols   # 最大列
print(f"当前sheet页的最大行是：{max_col}，最大列是：{max_col}")
# 获取某个单元格的值
print(sheet.cell_value(1, 1))
# 读取某一行/列的数据
print(sheet.row_values(1))
print(sheet.col_values(2))


# 回顾复习：将两个列表合成一个字典
list1 = ["name", "age", "sex"]
list2 = ["秀儿", "18", "女"]

# 使用zip函数将两个列表组合成元组，然后转换为字典
dict1 = dict(zip(list1,list2))
print(dict1)

# 通过for循环遍历list1的索引，将list1的元素作为键，list2中对应位置的元素作为值，添加到新创建的dict2字典中
dict2 = {}
for i in range(len(list1)):
    dict2[list1[i]] =list2[i]

print(dict2)

# 推导式实现
dict3 = {list1[i]:list2[i] for i in range(len(list1))}
print(dict3)

"""
方法封装：
1、Excel表格
2、json格式
"""
# 定义一个类
class ReadData:
    # 1、定义一个初始化方法：
    def __init__(self):
        # 1.1、获取文件路径
        self.excel_path = os.path.dirname(os.path.dirname(__file__)) + r"/testData/data.xlsx"
        # 1.2、打开并读取Excel
        self.read_book = xlrd.open_workbook(self.excel_path)
        # 1.3、获取指定的sheet页
        self.sheet = self.read_book.sheet_by_index(0)
        # 1.4、获取最大行/列
        self.max_row = self.sheet.nrows
        self.max_col = self.sheet.ncols
        # 1.5、预设一个返回结果列表，默认为空
        self.res_list = []
        # 1.6、获取第一行作为字典的key
        self.first_row = self.sheet.row_values(0)

    # 2、定义一个组装数据的对外方法：read_excel()
    def read_excel(self):
        # 2.1、循环读取每一行作为一条测试用例(第一行除外)
        for i in range(1, self.max_row):
            # 2.2、获取每一行的数据
            row_value = self.sheet.row_values(i)
            # 2.3、组成一个字典
            dict1 = dict(zip(self.first_row, row_value))
            # 2.4、将组装好的字典放到结果列表内
            self.res_list.append(dict1)
        # 2.5、降租装好的结果列表返回给调用者
        return self.res_list

    # 定义一个组装数据的对外方法：read_json()
    def read_json(self):
        # 获取文件路径
        json_pth = os.path.dirname(os.path.dirname(__file__)) + r"/testData/data.json"
        # 打开json文件
        f = open(json_pth, "r")
        # 将json转化为字典
        test_data = json.load(f)
        # 关闭json文件
        f.close()
        # 读取字典内所有的value，转化为列表
        test_data1 = list(test_data.values())
        # 返回组装好的列表
        return test_data1



if __name__ == '__main__':
    # 实例化
    rd = ReadData()
    # 调用实例化方法
    # print(rd.read_excel())
    print(rd.read_json())


